package oa.hleast.common.utils;//package oa.hleast.common.utils;
//
//import cn.hutool.core.util.IdUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.bytedeco.javacv.FFmpegFrameGrabber;
//import org.bytedeco.javacv.Frame;
//import org.bytedeco.javacv.Java2DFrameConverter;
//
//import javax.imageio.ImageIO;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.io.IOException;
//
//@Slf4j
//public class VideoUtil {
//
//    // 获取要取得的帧数
//    private static final int GET_FRAMES_LENGTH = 5;
//
//
//    /**
//     * <h5>功能:获取一张视频截图并保存同名的jpg文件到指定目录</h5>
//     *
//     * @param file 视频文件
//     */
//    public static File getScreenshot(File file) {
//        log.info("视频文件[{}]截图开始", file.toURI());
//        File imagerFile = null;
//        FFmpegFrameGrabber grabber;
//        try {
//            grabber = FFmpegFrameGrabber.createDefault(file);
//            // 第一帧图片存储位置(也是视频路径)
//            String targerFilePath = file.getAbsolutePath();
//            // 图片名称
//            String targetFileName = IdUtil.simpleUUID();
//            grabber.start();
//            // 视频总帧数
//            int videoLength = grabber.getLengthInFrames();
//
//            Frame frame = null;
//            int i = 0;
//            while (i < videoLength) {
//                // 过滤前5帧,避免出现全黑的图片,依自己情况而定(每循环一次取一帧)
//                frame = grabber.grabFrame();
//                if ((i > GET_FRAMES_LENGTH) && (frame.image != null)) {
//                    break;
//                }
//                i++;
//            }
//
//            // 视频旋转度
//            String rotate = grabber.getVideoMetadata("rotate");
//            Java2DFrameConverter converter = new Java2DFrameConverter();
//            // 绘制图片
//            BufferedImage bi = converter.getBufferedImage(frame);
//            if (rotate != null) {
//                // 旋转图片
//                bi = rotate(bi, Integer.parseInt(rotate));
//            }
//            // 图片的类型
//            String imageMat = "jpg";
//            // 图片的完整路径
//            String imagePath = targerFilePath + File.separator + targetFileName + "." + imageMat;
//            if (!"".equals(targerFilePath)) {
//                // 指定路径
//                imagePath = targerFilePath + "." + imageMat;
//            }
//
//            // 创建文件
//            imagerFile = new File(imagePath);
//            ImageIO.write(bi, imageMat, imagerFile);
//
//            grabber.stop();
//        } catch (IOException e) {
//            log.error("视频信息帧数处理发生异常 [{}]", e.getMessage());
//            e.printStackTrace();
//        }
//
//        return imagerFile;
//    }
//
//    // ==================== private method ====================
//
//    /**
//     * <h5>功能:根据视频旋转度来调整图片</h5>
//     *
//     * @param src   捕获的图像
//     * @param angel 视频旋转度
//     * @return BufferedImage
//     */
//    private static BufferedImage rotate(BufferedImage src, int angel) {
//        int srcWidth = src.getWidth(null);
//        int srcHeight = src.getHeight(null);
//        int type = src.getColorModel().getTransparency();
//        Rectangle rectDes = calcRotatedSize(new Rectangle(new Dimension(srcWidth, srcHeight)), angel);
//        BufferedImage bi = new BufferedImage(rectDes.width, rectDes.height, type);
//        Graphics2D g2 = bi.createGraphics();
//        g2.translate((rectDes.width - srcWidth) / 2, (rectDes.height - srcHeight) / 2);
//        g2.rotate(Math.toRadians(angel), srcWidth / 2, srcHeight / 2);
//        g2.drawImage(src, 0, 0, null);
//        g2.dispose();
//        return bi;
//    }
//
//    /**
//     * <h5>功能:计算图片旋转大小</h5>
//     *
//     * @param src   屏幕坐标中捕获的矩形区域
//     * @param angel 视频旋转度
//     * @return
//     */
//    private static Rectangle calcRotatedSize(Rectangle src, int angel) {
//        if (angel >= 90) {
//            if (angel / 90 % 2 == 1) {
//                int temp = src.height;
//                src.height = src.width;
//                src.width = temp;
//            }
//            angel = angel % 90;
//        }
//        double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;
//        double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;
//        double angelAlpha = (Math.PI - Math.toRadians(angel)) / 2;
//        double angelWidth = Math.atan((double) src.height / src.width);
//        double angelHeight = Math.atan((double) src.width / src.height);
//        int lenWidth = (int) (len * Math.cos(Math.PI - angelAlpha - angelWidth));
//        int lenHeight = (int) (len * Math.cos(Math.PI - angelAlpha - angelHeight));
//        int desWidth = src.width + lenWidth * 2;
//        int desHeight = src.height + lenHeight * 2;
//        return new java.awt.Rectangle(new Dimension(desWidth, desHeight));
//    }
//}
